package com.ginmeta.service.stp;

import cn.dev33.satoken.stp.StpInterface;
import cn.hutool.core.convert.Convert;
import com.ginmeta.common.base.StpLoginInterface;
import com.ginmeta.common.utils.SystemUtils;
import com.ginmeta.domain.login.LoginUser;
import com.ginmeta.service.system.SysRoleService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 自定义权限验证
 * @author GinMeta
 */
@Component
public class StpInterfaceImpl implements StpInterface, StpLoginInterface {

    @Resource
    private SysRoleService sysRoleService;

    /**
     * 返回一个账号所拥有的权限码集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        // 查询菜单权限

        return new ArrayList<>();
    }

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        // 登录用户
        LoginUser loginUser = getLoginUser();

        // 获取角色列表
        Set<String> roles = new HashSet<>();
        // 管理员拥有所有权限
        if (SystemUtils.isAdmin(loginUser.getUser().getUserId())) {
            roles.add("*");
        } else {
            roles = sysRoleService.selectRolePermissionByUserId(Convert.toLong(loginId));
        }

        return roles.stream().toList();
    }
}
